ШАГ 3 - Введение в SQL

Синтаксис команды SELECT (выбрать)

 SELECT [DISTINCT {*|столбец [псевдоним], ..... }
 FROM {таблица, ....... }
 WHERE условие(я)
 ORDER BY {столбец|выражение, .... } [ASC|DESC]

где,

* -- означает выбор всех столбцов
DISTINCT -- позволяет избежать дублирования строк
FROM - (из) -- задает список таблиц, из которых производится выборка
WHERE - (где) -- задает ограничивающие условия
AND / OR - (и / или) -- логические связки для объединения условий
() -- используются для явного задания порядка выполнения условий
ORDER BY - (упорядочить по) -- фраза всегда стоит последней в SELECT'е
ASC / DESC -- задают сортировку по возрастанию/убыванию

Команда SQL должна заканчиваться символом "точка с запятой".
Замечание: Следует помнить, что результат сравнения во фразе WHERE может зависеть от типа данных. Например, идет поиск по имени 'SCOTT'. Для типа данных CHAR значения 'SCOTT' 'SCOTT ' совпадают, а для типа VARCHAR2 нет, так как поиск ведется по точному совпадению значений и пробелы справа не добавляются.

Команды SQL*Plus

EXIT -- выход из SQL*Plus
DESC[RIBE] имя_таблицы -- возвращает описание таблицы
SAVE имя_файла -- копирует буфер SQL в файл .SQL
SAVE имя_файла APPEND -- добавляет буфер SQL в существующий файл
SAVE имя_файла REPLACE -- пересоздает существующий файл .SQL
GET имя_файла -- копирует файл .SQL в буфер SQL
START имя_файла -- запускает командный файл
ED имя_файла -- запускает строчный редактор
DEFINE_EDITOR=имя_ред -- определение системного редактора

Операторы сравнения

BETWEEN -- между
AND -- и
IN (список) -- в (списке)
LIKE -- как
IS NULL -- есть NULL

Элементы (список) перечисляются через запятую.
Оператор LIKE позволяет искать значения по вхождению в них символа. Для задания шаблона поиска применяют два символа:
% -- означает любую последовательность символов, в том числе пустую;
_ -- точно один символ.

Теория

Если в поле нет значения, то оно считается пустым NULL.
Если в выражении хотя бы один из операндов не определен, то не определено все выражение.
Очень часто по смыслу задачи неопределенное значение можно при вычислениях заменить каким-то определенным значением.
Это позволяет сделать функция NVL, имеющая формат: NVL(имя, значение)
Например, если комиссионные не назначены сотруднику, то их следует считать равными нулю. Поэтому при вычислениях со столбцом COMM следует использовать функцию NVL(COMM,0)

Синонимы имен позволяют дать выходным таблицам альтернативные заголовки, в том числе на русском языке. Синоним записывается через пробел после имени или выражения.
Синонимы могут быть введены только во фразе SELECT.

Допустима сортировка по нескольким столбцам, перечисляемым во фразе ORDER BY через запятую.
Если для некоторых столбцов необходимо задать обратный порядок сортировки, слово DESC записывают после имени соответствующего столбца через запятую.

Оператор конкатенации обозначаемый как || позволяет формировать символьные строки объединяя столбцы, арифметические выражения, константы и литералы.
Литерал -- любой набор букв, цифр, выражений, не содержащий имен столбцов и их синонимов.
Даты и символьные литералы берутся в одинарные кавычки.

Упражнения

1. Извлечем всю информацию из таблицы ЕМР (сотрудники).

SELЕСТ * FRОМ EMP;

И в окне SQL*Plus Вы должны получить следующие значения

 EMPNO    ENAME    JOB          MGR     HIREDATE       SAL         COMM   DEPTNO
 -------------------------------------------------------------------------------
 7639     SMITH    CLERK        7902    13-JUN-83       800.00                20
 7499     ALLEN    SALESMAN     7698    15-AUG-83     1,600.00    300.00      30
 7521     WARD     SALESMAN     7698    26-МАР-84     1,250.00    500.00      30
 7566     JONES    MANAGER      7839    31-ОCТ-83     2,975.00                20
 7654     МARTIN   SALESMAN     7698    05-DEC-83     1,250.00  1.400.00      30
 7698     BLAKE    MANAGER      7839    11-JUN-84     2,850.00                30
 7782     CLARK    MANAGER      7839    14-MAY-84     2,450.00                10
 7788     SCOTT    ANALYST      7566    05-MAR-84     3,000.00                20
 7839     КING     PRESIDENT            09-JUL-84     5,000.00                10
 7844     TURNER   SALESMAN     7698    04-JUN-84     1,500.00                30
 7876     ADAMS    CLERK        7788    04-JUN-84     1,100.00                20
 7900     JAMES    CLERK        7698    23-JUL-84       950.00                30
 7902     FORD     ANALYST      7566    05-DEC-83     3,000.00                20
 7934     MILLER   CLERK        7782    21-NOV-83     1,300.00                10

2. Найдем всех сотрудников с окладом в интервале от 1000 до 2000, включительно.

SELЕСТ ENAME, DEPTNO, SAL FRОМ EMP WHERE SAL BETWEEN 1000 AND 2000;

 ENANE       DEPTNO         SAL
 ------------------------------
 ALLEN           30    1,600.00
 WARD            30    1,250.00
 MARTIN          30    1,250.00
 TURNER          30    1,500.00
 ADAMS           20    1,100.00
 MILLER          10    1,300.00

3. Извлечем полную информацию о всех сотрудниках в отделах 10 и 20 так чтобы их фамилии шли в алфавитном порядке.

SELЕСТ * FRОМ EMP WHERE DEPTNO IN (10,20);

 ЕМРNО  ЕNАМЕ    JOB           MGR     HIREDATE      SAL        CОММ  DEPTNO
 ---------------------------------------------------------------------------
 7876   ADANS    CLERK        7788     04-JUN-84   1,100.00               20
 7782   CLARC    МANАGER      7839     24-MAY-84   2,450.00               10
 7902   FORD     ANALYST      7566     25-DEC-83   3,000.00               20 
 7566   JONES    MANAGER      7839     31-OCТ-83   2,975.00               20 
 7839   KING     PRESIDENT             09-JUL-84   5,000.00               10
 7934   MILLER   CLERK        7782     21-NOV-83   1,300.00               10
 7783   SCOTT    ANALYST      7566     05-МAR-84   3,000.00               20
 7639   SNITH    CLERС        7902     23-JUN-83     800.00               20

4. Выведем фамилии (ENAME) и полный годовой доход (RENUMERATION, то есть зарплата плюс комиссионные) всех сотрудников.

SELЕСТ ENAME, SAL * 12 + NVL(COMM,0) RENUMERATION FRОМ EMP;

 ENAME       RENUMERATION 
 ------------------------
 SMITH               9600
 ALLEN              19500
 WARD               15500
 JONS               35700
 MARTIN             16400
 BLAKA              34200 
 CLARK              29400
 SCOTT              36000
 KING               60000
 TURNER             18000 
 ADAMS              13200
 JAMES              11400
 FORD               36000
 MILLER             15600

5. Выдадим фамилии (ENAME), годовую зарплату (ANNUAL_SAL) и комисионное вознаграждение (СОММ) всех продавцов (SALESMAN), у которых оклад превышает их комиссионные за месяц. Расположим их в порядке убывания окладов, Если встретится несколько сотрудников с одинаковым окладом они должны быть перечислены в алфавитном порядке.

SELЕСТ ENAME, SAL * 12 ANNUAL_SAL, СОММ FRОМ EMP WHERE SAL > COMM AND JOB = 'SALESHAN' ORDER BY SAL, DESC, ENANE;

 ENAME         ANNUAL_SAL         COMM
 -------------------------------------
 ALLEN              19200       300.00
 TURNER             18000          .00
 WARD               15000       500.00

6. Выдадим данные в отформатированном виде.

SELЕСТ ENAME || 'HAS HELD ТНЕ POSITION OF '|| JOB|| ' IN DEPT ' || DEPTNO || ' SINCE '|| HIREDATE " Who, whаt and when" FRОМ EMP;

Who,  what  and  when
--------------------------------------------------------------------------------------------------------------------------
SMITH HAS HELD THE POSITION OF  CLERK IN DEPT 20  SINCE 13-JUN-83
ALLEN HAS HELD THE POSITION OF  SALESMAN IN DEPT 3O   SINCE 15-AUG-83
WARD HAS HELD THE POSITION OF SALESMAN IN DEPT 30 SINCE 26-MAR-84
JONS HAS HELD THE POSITION OF MANAGER IN DEPT 20 SINCE 31-OCT-83
MARTIN HAS HELD THE  POSITION OF SALESMAN IN DEPT 30 SINCE 05-DEC-83
BLAKE HAS HELD THE POSITIQN OF MANAGER  IN DEPT 30 SINCE 11-JUN-84
CLARK HAS HELD THE POSITION OF  MANAGER  IN DEPT 10 SINCE 14-MAY-84
SCOTT HAS HELD THE POSITION  OF  ANALYST IN DEPT 20 SINCE 05-MAR-84
KING HAS HELD THE POSITION  OF  PRESIDENT IN DEPT 10 SINCE 09-JUL-84
TURNER  HAS HELD THE  POSITION OF  SALESMAN IN DEPT 30 SINCE 04-JUN-84
ADAMS  HAS HELD THE P0SITION  OF CLERK  IN DEPT 20  SINCE  04-JUN-84
JAMES HAS HELD THE POSITON  OF CLERK  IN DEPT 30  SINCE 23-JUL-84
FORD HAS HELD THE  POSITION  OF  ANALYST IN DEPT 20 SINCE 05-DEC-83
MILLER HAS HELD THE P0SITION  OF CLERK IN DEPT 10 SINCE 21-NOV-83
Автор: Michael Nemtsev aka 'LaFlour'

Hosted by uCoz